package com.sansan.qiangji.realize.warehouse;

import com.sansan.qiangji.VO.warehouse.stackerTask.StackerTaskVO;
import com.sansan.qiangji.VO.warehouse.stackerTaskIn.StackerTaskInVO;
import com.sansan.qiangji.entity.warehouse.StackerTaskIn;
import com.sansan.qiangji.entity.warehouse.StackerTaskMove;
import com.sansan.qiangji.entity.warehouse.StackerTaskOut;
import com.sansan.qiangji.enums.ResultEnum;
import com.sansan.qiangji.exception.ServiceException;
import com.sansan.qiangji.service.impl.warehouse.StackerTaskInServiceImpl;
import com.sansan.qiangji.service.impl.warehouse.StackerTaskMoveServiceImpl;
import com.sansan.qiangji.service.impl.warehouse.StackerTaskOutServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

@Service
@Slf4j
public class StackerTaskInReal {
    private StackerTaskInServiceImpl stackerTaskInService;
    private StackerTaskOutServiceImpl stackerTaskOutService;
    private StackerTaskMoveServiceImpl stackerTaskMoveService;

    @Resource
    public void setStackerTaskService(StackerTaskInServiceImpl stackerTaskInService){
        this.stackerTaskInService = stackerTaskInService;
    }

    @Resource
    public void setStackerTaskOutService(StackerTaskOutServiceImpl stackerTaskOutService){
        this.stackerTaskOutService = stackerTaskOutService;
    }

    @Resource
    public void setStackerTaskMoveService(StackerTaskMoveServiceImpl stackerTaskMoveService){
        this.stackerTaskMoveService = stackerTaskMoveService;
    }

    public StackerTaskInVO findByStackerTaskInCode(String stackerTaskInCode){
        StackerTaskIn stackerTaskIn = stackerTaskInService.findByStackerTaskInCode(stackerTaskInCode);
        if (stackerTaskIn == null){
            log.error("【入库任务】入库任务不存在");
            throw new ServiceException(ResultEnum.STACKER_TASK_IN_NOT_EXIST);
        }
        StackerTaskInVO stackerTaskInVO = new StackerTaskInVO();
        BeanUtils.copyProperties(stackerTaskIn, stackerTaskInVO);
        return stackerTaskInVO;
    }

    public List<StackerTaskVO> findStackerTasking(){
        List<StackerTaskVO> stackerTaskVOS = new ArrayList<>();
        List<String> statusList = new ArrayList<>();
        statusList.add("中断");
        statusList.add("入库中");
        List<StackerTaskIn> stackerTaskIns = stackerTaskInService.findByStackerTaskStatusIn(statusList);
        for (StackerTaskIn stackerTaskIn : stackerTaskIns){
            StackerTaskVO stackerTaskVO = new StackerTaskVO();
            stackerTaskVO.setStackerTaskCode(stackerTaskIn.getStackerTaskInCode());
            stackerTaskVO.setStackerTaskType("入库");
            stackerTaskVO.setStackerName(stackerTaskIn.getStackerName());
            stackerTaskVO.setShelveName(stackerTaskIn.getShelveName());
            stackerTaskVO.setStackerTaskPace(stackerTaskIn.getStackerTaskInPace());
            stackerTaskVO.setStackerTaskStatus(stackerTaskIn.getStackerTaskInStatus());
            stackerTaskVOS.add(stackerTaskVO);
        }
        statusList.clear();
        statusList.add("中断");
        statusList.add("出库中");
        List<StackerTaskOut> stackerTaskOuts = stackerTaskOutService.findByStackerTaskStatusIn(statusList);
        for (StackerTaskOut stackerTaskOut : stackerTaskOuts){
            StackerTaskVO stackerTaskVO = new StackerTaskVO();
            stackerTaskVO.setStackerTaskCode(stackerTaskOut.getStackerTaskOutCode());
            stackerTaskVO.setStackerTaskType("出库");
            stackerTaskVO.setStackerName(stackerTaskOut.getStackerName());
            stackerTaskVO.setShelveName(stackerTaskOut.getShelveName());
            stackerTaskVO.setStackerTaskPace(stackerTaskOut.getStackerTaskOutPace());
            stackerTaskVO.setStackerTaskStatus(stackerTaskOut.getStackerTaskOutStatus());
            stackerTaskVOS.add(stackerTaskVO);
        }
        statusList.clear();
        statusList.add("中断");
        statusList.add("移库中");
        List<StackerTaskMove> stackerTaskMoves = stackerTaskMoveService.findByStackerTaskStatusIn(statusList);
        for (StackerTaskMove stackerTaskMove : stackerTaskMoves){
            StackerTaskVO stackerTaskVO = new StackerTaskVO();
            stackerTaskVO.setStackerTaskCode(stackerTaskMove.getStackerTaskMoveCode());
            stackerTaskVO.setStackerTaskType("移库");
            stackerTaskVO.setStackerName(stackerTaskMove.getStackerName());
            stackerTaskVO.setShelveName(stackerTaskMove.getOldShelveName());
            stackerTaskVO.setStackerTaskPace(stackerTaskMove.getStackerTaskMovePace());
            stackerTaskVO.setStackerTaskStatus(stackerTaskMove.getStackerTaskMoveStatus());
            stackerTaskVOS.add(stackerTaskVO);
        }
        return stackerTaskVOS;
    }
}
